package E_2024;

public class E_100_4 {
    /*
    题目描述
        求出大于或等于 N 的最小回文素数。
        回顾一下，如果一个数大于 1，且其因数只有 1 和它自身，那么这个数是素数。
        例如，2，3，5，7，11 以及 13 是素数。
        回顾一下，如果一个数从左往石读与从右往左读是一样的，那么这个数是 回文数Q例如，12321 是回文数。
    示例 1:
        输入:6
        输出:7
    示例 2:
        输入:8
        输出:11
     */
    public static void main(String[] args) {
        System.out.println(num(11121111));
        System.out.println(num(4));
        System.out.println(num(6));
        System.out.println(num(111211111));
    }
    public static int num(int num){
        int ans = num;
        int x = 1;
        int k = 1;
        while(num > 0){
            if (num / 10 > 0) {
                x *= 10;
                k++;
            }
            num /= 10;
        }
        do{
            ans++;
            // 过滤 偶数位
            if (ans / x > 9) {
                k++;
                x *= 10;
            }
            if(k % 2  == 0 && ans != 11) continue;
            if (!hw(ans)) continue;
            if (zs(ans)) return ans;
        }while(true);
    }
    public static boolean zs(int num){
        for (int i = 2; i < Math.sqrt(num); i++) {
            if ( num % i == 0) return false;
        }
        return true;
    }
    public static boolean hw(int num){
        int temp = num;
        int x = 0;
        while(temp > 0){
            x = x * 10 + temp % 10;
            temp /= 10;
        }
        return x == num;
    }
}
